import { Controller, Get, Post, Put, Delete, Body, Param, UseGuards, Request } from '@nestjs/common';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { RolesGuard } from '../auth/guards/roles.guard';
import { Roles } from '../auth/decorators/roles.decorator';
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
@ApiTags('文章管理')
@Controller('api/posts')
export class PostController {
  constructor() {}

  @Get()
  @ApiOperation({ summary: '获取所有已发布的文章（所有用户可访问）' })
  @ApiResponse({ status: 200, description: '返回文章列表' })
  async getAllPublishedPosts() {
    return { message: '获取已发布文章列表' };
  }

  @Get(':id')
  @ApiOperation({ summary: '获取单篇文章详情（所有用户可访问）' })
  @ApiResponse({ status: 200, description: '返回文章详情' })
  async getPostById(@Param('id') id: string) {
    // 这里实现获取单篇文章的逻辑
    return { message: `获取文章 ${id} 的详情` };
  }

  @Post()
  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('AUTHOR, ADMIN')
  @ApiOperation({ summary: '创建新文章（仅作者和管理员）' })
  @ApiResponse({ status: 201, description: '文章创建成功' })
  async createPost(@Body() createPostDto: any, @Request() req: any) {
    // 这里实现创建文章的逻辑
    return { message: '文章创建成功', authorId: req.user.sub };
  }

  @Put(':id')
  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('AUTHOR, ADMIN')
  @ApiOperation({ summary: '更新文章（仅作者和管理员）' })
  @ApiResponse({ status: 200, description: '文章更新成功' })
  async updatePost(@Param('id') id: string, @Body() updatePostDto: any, @Request() req: any) {
    // 这里实现更新文章的逻辑
    return { message: `文章 ${id} 更新成功`, authorId: req.user.sub };
  }

  @Delete(':id')
  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('ADMIN')
  @ApiOperation({ summary: '删除文章（仅管理员）' })
  @ApiResponse({ status: 200, description: '文章删除成功' })
  async deletePost(@Param('id') id: string) {
    // 这里实现删除文章的逻辑
    return { message: `文章 ${id} 删除成功` };
  }

  @Post(':id/publish')
  @UseGuards(JwtAuthGuard, RolesGuard)
  @Roles('AUTHOR, ADMIN')
  @ApiOperation({ summary: '发布文章（仅作者和管理员）' })
  @ApiResponse({ status: 200, description: '文章发布成功' })
  async publishPost(@Param('id') id: string) {
    // 这里实现发布文章的逻辑
    return { message: `文章 ${id} 发布成功` };
  }
}
